【LINEミニアプリ】クイック入力機能で会員登録がもっと簡単になりました!

【LINEミニアプリ】クイック入力機能で会員登録がもっと簡単になりました!

Clock Icon2025.01.07

リテールアプリ共創部のるおんです。
先日LINEヤフーさんからクイック入力機能がリリースされました。
今回は、LINE ミニアプリの新機能であるクイック入力機能を試してみたので、その内容をご紹介したいと思います!

今回のクイック入力機能の実装にあたり、家族で楽しめる廉価な娯楽を提供する店舗を運営する 株式会社テイツー様 にご協力いただきました。同社は書籍、家庭用テレビゲーム、トレーディングカード、ホビー、スマートフォン、CD、DVD、衣類等の販売および買取を行っており、LINEミニアプリの会員証を用いて幅広い顧客層の需要に応えています。

https://www.tay2.co.jp/

今回は株式会社テイツー様のLINEミニアプリにおける実装を元に本機能を解説していきたいと思います。

また、こちらからアプリ登録をすることで実際に手元でクイック入力機能を試すことができます。

スクリーンショット 2024-10-11 17.42.24

クイック入力機能とは

https://developers.line.biz/ja/docs/partner-docs/quick-fill/overview/

公式ドキュメントによると

クイック入力とは、LINEミニアプリ上で[自動入力]をタップすることで、必要なプロフィール情報が自動で入力される機能です。ユーザーがアカウントセンターで設定した共通プロフィールの情報が、LINEミニアプリで簡単に利用できます。

LINE内には、LINEとYahoo! JAPANで登録している情報を管理する、Account Center という機能があります。
今回リリースされた クイック入力 では、このAccount Centerで管理しているユーザー情報を使ってLINEミニアプリ内の会員登録ができるため、めんどくさい会員登録作業を効率よく済ませることができます。

今回の機能を使用すると以下の動画のような機能を実装することができます。

https://www.youtube.com/watch?v=vy12zyJwNL8

この機能により、LINEミニアプリへのアクセスから会員登録までがシームレスになり、従来必要だったプロフィール情報の手動入力が省略されます。結果として、ユーザーはより迅速かつ簡便に、ストレスフリーでサービスを利用開始できます。また、企業側にとっても会員登録時のユーザー離脱率の減少が期待できます。

また、インストール不要という特徴を持つLINEミニアプリと、このクイック入力機能は非常に相性が良いと言えます。従来のLINEミニアプリは、インストール不要という利点があったものの、会員登録時には依然として手間がかかっていました。今回の機能追加により、『ユーザー認知 → アプリ導入 → 会員登録 → アプリ使用開始』 という一連のプロセスがシームレスになり、ユーザーの利用開始までの時間と手間を大幅に削減することが可能になりました。これにより、LINEミニアプリの『手軽さ』という価値がさらに向上したと言えるでしょう。

実装してみた

ドキュメントの手順に従って実装していきます。
https://developers.line.biz/ja/docs/partner-docs/quick-fill/overview/#how-to-use-quick-fill

1. セットアップ

まず、LINE Developers Consoleからクイック入力のスコープを指定する必要があります。
クイック入力の利用申請が承認されると、Account Centerから参照できるスコープが選択できるようになるので、使用したいスコープにチェックを追加します。

quick-fill-scope-ja.a516c9ef

次に、アプリケーションに必要なパッケージをインストールします。今回のプロジェクトはReactを用いて実装しています。

zsh
npm install @line/liff-common-profile-plugin

クイック入力機能が使用できるように設定します。これにより、クイック入力機能を実装するためのモジュールが使用できるようになります。

import liff from "@line/liff"
import { LiffCommonProfilePlugin } from "@line/liff-common-profile-plugin";
liff.use(new LiffCommonProfilePlugin());

2. 実装

liff.commonProfile.get()メソッドを使用すると、モーダルが下から表示されユーザー情報を表示してくれます。そして、「自動で入力する」を押した際にprofileの値が取得できます。

引数に必要な項目を配列で渡してあげることで、そのデータを取得することができます。例えば、family-name(性)、 given-name(名), family-name-kana(セイ), given-name-kana(メイ)を取得してみたい場合、以下のように取得できます。

 const profile = await liff.commonProfile.get(
      ['family-name', 'given-name', 'family-name-kana', 'given-name-kana']
    )

IMG_0866

この機能を使用してAccount Centerに入っている情報から会員登録フォームに自動入力できる仕組みを作っていきたいと思います!

以下は今回実装させていただいたプロジェクトのコードの一部です。

getProfileFromAccountCenter関数を作成し、Account Centerからprofileを取得できるようにします。

// 取得したいユーザー情報のkey配列
const profileKeys = [
  'family-name',
  'given-name',
  'family-name-kana',
  'given-name-kana',
  'sex-enum',
  'bday-day',
  'bday-month',
  'bday-year',
  'tel',
  'postal-code',
  'address-level1',
  'address-level2',
  'address-level3',
  'address-level4',
] as Array<keyof CommonProfile>

// Account Centerからユーザー情報を取得する
const getProfileFromAccountCenter =
  async (): Promise<Partial<CommonProfile> | null> => {
    if (process.env.NODE_ENV === 'development') {
      // 開発環境ではダミーデータを返す。
      return await liff.$commonProfile.getDummy(profileKeys, 1)
    } else {
      return await liff.$commonProfile.get(profileKeys)
    }
  }

環境変数を利用して開発環境の場合はダミーデータを取得するようにしています。

本プロジェクトではフォームの状態管理ライブラリにformikを使用しているので、先ほどのgetProfileFromAccountCenter関数で取得したユーザー情報をformikにセットするsetValuesToForm関数を作成しました。

そして、この関数をuseEffect内に記述することで会員登録画面に訪れた初回のタイミングで関数を実行してあげます。また、Account CenterボタンのonClickイベントにもこの関数を渡すことでボタンをクリックした際に再度クイック入力機能を実行できるようにします。

// ...省略
import liff from '@line/liff'
import {
  CommonProfile,
  LiffCommonProfilePlugin,
} from '@line/liff-common-profile-plugin'

liff.use(new LiffCommonProfilePlugin())

export function SignUpForm({ ...省略 }: SignUpFormProps) {
  const formik = useFormik<SignUpFormValues>({
    initialValues: defaultInitialValues,
    onSubmit: handleSubmit,
    validate: validateSignUpForm,
  })

// ...省略

+const setValuesToForm = () => {
+   getProfileFromAccountCenter().then((profile) => {
+     if (!profile) return
+
+     // formikに値をセットする
+     formik.setValues({
+       ...formik.values,
+       lastName: profile['family-name'] || '',
+       firstName: profile['given-name'] || '',
+       lastNameKana: profile['family-name-kana'] || '',
+       firstNameKana: profile['given-name-kana'] || '',
+       gender: convertToFormGender(profile['sex-enum']),
+       birthday: createDateStringFromAccountCenter({
+         bdayDay: profile['bday-day'],
+         bdayMonth: profile['bday-month'],
+         bdayYear: profile['bday-year'],
+       }),
+       phone: profile['tel'] ? formatPhoneNumber(profile['tel']) : '',
+       postalCode: profile['postal-code'] || '',
+       prefecture: profile['address-level1'] || '',
+       city: profile['address-level2'] || '',
+       street: profile['address-level3'] || '',
+       apartment: profile['address-level4'] || '',
+     })
+   })
+ }

  useEffect(() => {
+ // 画面を開いた際にクイック入力が実行されるようにする
+    setValuesToForm()
  }, [])

  return (
    <>
      <Panel>
+       <button onClick={setValuesToForm} style={styles.wrapper}>  // ボタンを押して再実行できるようにする
+         <img
+           style={{
+             width: '256px',
+             height: '65px',
+           }}
+           src="/images/account-center-black-with-description.png"
+           alt="アカウントセンターボタン"
+         />
+      </button>
       {/* ...省略 */}
        <form onSubmit={formik.handleSubmit} style={styles.wrapper}>
          <Field label="氏名 (姓)" error={formik.errors.lastName} required>
            <InputText
              name="lastName"
              value={formik.values.lastName}
              required
              onChange={formik.handleChange}
            />
          </Field>
        {/* ...省略 */}
        </form>
      </Panel>
    </>
  )
}

大まかな実装の流れは以上の通りです。
このようにすることで、クイック入力機能によってAccount Centerから情報を取得して、一瞬で会員登録フォームを埋めることができます。

注意点

Accout Centerのボタンの画像はガイドラインを準拠する必要があります。今回はLINE Yahooさんが提供するの画像の「Black説明あり」を採用し、規定サイズの256*65pxで実装しています。
https://developers.line.biz/ja/docs/partner-docs/quick-fill/design-regulations/

Black_説明あり

もう一点、必ずしもAccout Centerから取得できる値が自前のフォームのデータの形式と一致するとは限りません。そのため、自前でフォームの値形式に変換するヘルパー関数的なものを用意してあげる必要があります。

例えば、Accout Centerから返却される性別(sex-enum)の値は0~3のnumber型で、それぞれは0: 男性, 1: 女性, 2: その他, 3: NO_ANSWERというような性別に対応しています。
しかし、本プロジェクト内のフォームでは、"male", "female", "other"`という文字列で性別を管理しています。そのため、Accout Centerから返却される値をプロジェクトのフォームで使用されている形式に変換してあげる必要がありました。

以下のようなヘルパー関数を作成してフォーム形式に変換する処理を挟むようにしました。

export function convertToFormGender(sexEnum: number | undefined): GenderT {
  switch (sexEnmu) {
    case 0:
      return 'male'
    case 1:
      return 'female'
    case 2 || 3:
      return 'other'
    default:
      return 'other'
  }
}
// セットする際に値を変換する
formik.setValues({
  // ...省略
  gender: convertToFormGender(profile['sex-enum']),
  })

それぞれのプロジェクトにおいて取得したプロフィール情報をカスタマイズして使用することが可能です。

以上でクイック入力機能を実装することができました!

おわりに

どうでしたでしょうか。今回はLINEミニアプリの新機能であるクイック入力を試してみました。
この機能によってLINEミニアプリアクセスから会員登録までシームレスなユーザー体験を提供することができ、今まで会員登録で離脱していたユーザー層をしっかりと確保できるようになると期待できます。

アプリのダウンロードに手間がかからずささっと使えるLINEミニアプリとこのクイック入力機能はとても相性が良く、ほんの数秒でユーザーと企業が繋がれる素晴らしい機能だと思いました。

また、LINEとYahooが合併され、二つの企業が持つ情報とテクノロジーによって実現されたこの機能に続き、今後もこのような便利な機能が増えていくことに期待です!

参考

https://developers.line.biz/ja/docs/partner-docs/quick-fill/overview/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.